home *** CD-ROM | disk | FTP | other *** search
Makefile | 2000-05-27 | 16.9 KB | 467 lines |
-
- # Make file for Speak Freely for Unix
-
- # Debugging options
-
- DEBUG = -g -DHEXDUMP
- #DEBUG = -g -DHEXDUMP -DNOCRYPTO
- #DEBUG = -O
-
- # Installation
-
- # Install program
- INSTALL = /usr/bin/install
- # Installation root directory
- INSTDIR = /usr/bin
- # Binaries
- INSTDIR_BIN = $(INSTDIR)/bin
- # Manual pages
- INSTDIR_MAN = $(INSTDIR)/man
-
- # Uncomment the appropriate CC, CCFLAGS, and LFLAGS statements below
- # according to your machine type.
-
- # Linux
-
- # Linux users please note: many Linux audio drivers are
- # half-duplex, even through your sound card may actually
- # have full-duplex hardware.
- #
- # The following settings are for the most "vanilla" Linux
- # sound configuration. This should work with the OSS/Free
- # sound drivers and audio hardware which emulates a Sound
- # Blaster Pro. If you get long delays, try also adding
- # -DLINUX_DSP_SMALL_BUFFER. If you have fancier hardware
- # and/or drivers it's wise to start out with simple settings
- # like those below and experiment with fancier modes (for
- # example, full duplex) only after you're sure the basic
- # functionality is working. Please see the detailed description
- # of the available flags which follows these declarations.
- #
- CCFLAGS =
- CC = gcc -O3 -m68040 -m68881 # for GNU's gcc compiler
- LFLAGS = -lncurses -lm
- #
- # If the above LFLAGS doesn't work, try the one below.
- #LFLAGS = -lcurses -ltermcap -lm
- #
- # The following is a detailed description of these and other flags
- # you may want to specify or not depending upon the details of your
- # Linux sound configuration.
- #
- # -DAUDIO_BLOCKING
- # You almost always want to specify this. If it's
- # not present, Speak Freely may read short blocks of
- # audio from the input source and send compressed
- # packets filled with mostly silence. The option is
- # provided since it's required with some workstation
- # audio hardware to avoid buffering problems. However,
- # some Linux configurations will encounter long delays
- # between audio input and transmission which cannot be
- # fixed entirely by setting the LINUX_DSP_SMALL_BUFFER and
- # associated flags described below. On such systems, you
- # may need to also to build without AUDIO_BLOCKING defined.
- # Such is the state of sound drivers for Linux that you may
- # have to experiment with various settings of these
- # variables to find a combination which works acceptably for
- # your audio hardware and drivers.
- #
- # -DHALF_DUPLEX
- # Required if your audio hardware and/or driver does not
- # permit simultaneous opening of the audio device for
- # input and output by two separate programs. As noted
- # above, many Linux audio drivers are half duplex and
- # require this flag even though the underlying audio hardware
- # is full duplex. Start by specifying this and then, if
- # you believe your system capable of full duplex,
- # experiment with turning it off.
- #
- # -DIN_AUDIO_DEV=\"/dev/audio\"
- # -DOUT_AUDIO_DEV=\"/dev/audio1\"
- #
- # Some Linux audio drivers, for example the commercial
- # OSS/Linux full-duplex driver, require full duplex programs
- # to open separate /dev/audio and /dev/audio1 devices for
- # input and output (or vice versa, presumably). To
- # configure the audio drivers in soundbyte.c to do this add
- # the above to the CCFLAGS declaration.
- #
- # If your make or shell has different opinions about how to
- # get quotes all the way from a make macro to the C compiler
- # command line, you may have to experiment with the quoting
- # on these declarations. As a last resort, just edit the
- # top of soundbyte.c and hammer in hard-coded definitions of
- # symbols IN_AUDIO_DEV and OUT_AUDIO_DEV. You can set the
- # input and output audio device file names to anything you
- # wish, not just the values given above.
- #
- # -DLINUX
- # Required for all Linux configurations.
- #
- # -DLINUX_DSP_SMALL_BUFFER
- # Some Linux sound drivers default to a very large buffer
- # for audio input, which results in long delays between
- # the time audio is received by the microphone and when
- # Speak Freely receives it to be transmitted. Defining this
- # symbol attempts to set the audio input buffer size to
- # 2048 bytes to minimise this delay.
- #
- # -DFRAGMENT_BUFSIZE=32
- # -DFRAGMENT_BUFPOWER=8
- #
- # Control the audio input buffer size. Only works if
- # LINUX_DSP_SMALL_BUFFER is also defined. The buffer size is
- # calculated as FRAGMENT_BUFSIZE * 2 ^ FRAGMENT_BUFPOWER.
- # Big input buffers will delay when transmitting (input ->
- # recording) while too small input buffers cause clipping.
- # If you have still trouble reducing the delay, try compiling
- # _without_ -DAUDIO_BLOCKING.
- # For more details please refer to README.Linux_OSS_bufsize
- # and soundinit() of soundbyte.c. This code was developed
- # and contributed by Walter Haidinger (walter.haidinger@gmx.at)
- # who reports that the above values work for him, with no
- # clipping with just about one second delay. These values
- # are applicable only to the OSS sound driver; defining them
- # requires -DLINUX_DSP_SMALL_BUFFER also be defined,
- # otherwise they will have no effect.
- #
- # -DLINUX_FPU_FIX
- # Some older C libraries on Intel-based Linux systems did
- # not place the processor's floating point unit into default
- # IEEE exception handling mode, which could result in
- # program crashes due to harmless floating point underflows
- # to zero which occur in the LPC compression library.
- # Defining this symbol compiles in code which explicitly
- # sets IEEE exception handling.
- #
- # -DM_LITTLE_ENDIAN
- # This symbol should be defined when compiling on "little-
- # endian" platforms such as the Intel x86 series and
- # clones. Little-endian machines store multi-byte values
- # with the least significant byte first in memory; big-endian
- # machines store bytes in the opposite order. This should
- # be defined unless you're running on a big-endian processor
- # (a SPARC, for example).
- #
- # -DNEEDED_LINEAR
- # Some Linux audio drivers (for example, the OSS/Free [but
- # *not* the commercial OSS/Linux drivers for the very same
- # card] drivers for the Ensoniq AudioPCI card) do not
- # support 8 bit mu-law I/O (which has been the default
- # /dev/audio format since the first Sun workstations were
- # shipped with audio in the late 1980's). Defining this
- # symbol compiles in code, developed and contributed by
- # Jean-Marc Orliaguet, which translates between the 16 bit
- # PCM audio used by such drivers and the 8 bit mu-law
- # representation expected by Speak Freely. If you're able
- # to send and receive audio but the sound is horribly
- # distorted, you may need to enable this. If you're able to
- # play the mu-law sound files included with Speak Freely,
- # for example:
- # cat ring.au >/dev/audio
- # without distortion, then it's unlikely this option will help.
- #
- # Another problem frequently encountered by Linux users is the
- # permissions on the audio device. To prevent eavesdropping, some
- # Linux distributions require root privilege to open audio input.
- # Unless you want to become root in order to run Speak Freely,
- # you'll need to change the permissions on /dev/audio (or whatever)
- # to allow regular users to open it for input.
-
- # Silicon Graphics
-
- # In order to build Speak Freely, you need to have the dmedia_dev
- # packages installed. In IRIX 5.3 and later, they are included with
- # The IRIX Development Option (IDO), but may not be installed by a
- # default installation of IDO. The command "versions dmedia_dev.sw"
- # will tell you whether these components are present on your system.
- # If they aren't, you need to install them before building Speak
- # Freely.
- #
- # The following options are optimal for IRIX 6.5 with C 7.2.1.
- # If you're compiling on an earlier version, adding the -float
- # option may speed up certain compression modes. If you get a
- # warning about -float being ignored in non -cckr compiles, it
- # has no effect on your system.
- #CC = cc -signed
- #LFLAGS = -laudio -lcurses -lm
-
- # Solaris 2.x
- # (courtesy of Hans Werner Strube)
-
- # (-fsingle is needed for pre-4.0 compilers and is ignored by 4.0 in
- # ANSI mode.) Defining THREADS enables multi-threaded operation in
- # sflwld (and has no effect on any other component of Speak Freely).
- # THREADS has been tested on Solaris 2.5 through 2.7 (a.k.a. 7) SPARC
- # and requires POSIX thread support. If you cannot build with THREADS
- # defined, simply remove it from the CCFLAGS line below. If you
- # disable THREADS, you can also remove the "-lpthread" library
- # specification from the LFLAGS line, which may cause an error if the
- # system does not include the POSIX threads library.
-
- #CC = cc -fsingle # for Sun Compiler
- #CCFLAGS = -DSolaris -DTHREADS
- #LFLAGS = -lcurses -lsocket -lnsl -lm -lpthread
-
- # SunOS 4.1.x
-
- #CC = cc -fsingle -DOLDCC
- #LFLAGS = -lcurses -ltermcap -lm
-
- # FreeBSD 2.2
- # (courtesy of Andrey A. Chernov)
-
- #
- # ** FreeBSD users please note: many FreeBSD audio drivers are
- # half-duplex, even through your sound card may actually
- # have full-duplex hardware. If you have trouble running
- # sfmike and sfspeaker at the same time, try uncommenting
- # the definition DUPLEX = -DHALF_DUPLEX later in this file.
- # Depending on how your driver handles non-blocking I/O,
- # you may also have to add -DAUDIO_BLOCKING to the
- # CCFLAGS line.
- #CCFLAGS = -DM_LITTLE_ENDIAN
- #LFLAGS = -lcurses -ltermcap -lcompat -lm
-
- # Hewlett-Packard
- # (courtesy of Marc Kilian)
- #
- # PRELIMINARY--NOT FULLY TESTED
- #CC = cc
- #CCFLAGS = -DHEWLETT_PACKARD -DOLDCC
- #LFLAGS = -lAlib -lcurses -ltermcap -lm
-
- # Where Perl is located on your system. This is used to make
- # a directly-executable version of sfvod.
- PERL = /usr/bin/perl
-
- # If your audio hardware is half duplex, uncomment the next line.
- # You can also, if you wish, define this on the CCFLAGS definition
- # for your hardware platform.
- #DUPLEX = -DHALF_DUPLEX
-
- # If your getdomainname() does not return the DNS domainname, define:
- #DOMAIN=-DMYDOMAIN=\"somedomain.net\"
-
- # ################################################################
- # ################################################################
-
- # Everything will probably work OK without any changes below
- # this line.
-
- # Default Internet socket port used by sfmike and sfspeaker. If you
- # change this, you will not be able to exchange sound with users
- # who've built Speak Freely with different values. This default can
- # be overridden by the "-Pport" option on sfspeaker and the ":port"
- # hostname suffix in sfmike. The ports used by Speak Freely are as
- # follows:
- #
- # INTERNET_PORT UDP Sound packets
- # INTERNET_PORT+1 UDP Control messages (RTCP)
- # INTERNET_PORT+2 TCP Communications with LWL server
- #
- # If you don't publish your information or query an LWL server,
- # INTERNET_PORT+2 is never used.
-
- INTERNET_PORT = 2074
-
- CARGS = -DInternet_Port=$(INTERNET_PORT)
-
- # Compiler flags
-
- CFLAGS = $(DEBUG) -Iadpcm -Ilpc -Igsm/inc -Imd5 -Iidea -Ilibdes -Iblowfish $(CARGS) $(DUPLEX) $(CCFLAGS) $(DOMAIN)
-
- PROGRAMS = sfspeaker sfmike sflaunch sflwld sflwl sfecho sfreflect sfvod
-
- all: $(PROGRAMS)
-
- SPKROBJS = speaker.o codecs.o deskey.o g711.o rate.o rtpacket.o soundbyte.o ulaw.o usleep.o vatpkt.o vox.o audio_hp.o audio_sgi.o common.o
-
- sfspeaker: $(SPKROBJS) adpcmlib.o libblowfish.o lpclib.o lpc10lib.o gsmlib.o deslib.o md5lib.o idealib.o libdes.o xdsub.o
- $(CC) $(SPKROBJS) adpcm/adpcm-u.o blowfish/libblowfish.a des/des.a md5/md5.o idea/idea.a lpc10/liblpc10.a gsm/lib/libgsm.a lpc/lpc.o xdsub.o libdes/libdes.a $(LFLAGS) -o sfspeaker
-
- MIKEOBJS = mike.o codecs.o deskey.o g711.o rate.o rtpacket.o soundbyte.o ulaw.o usleep.o vatpkt.o xdsub.o audio_hp.o audio_sgi.o
-
- sfmike: $(MIKEOBJS) adpcmlib.o libblowfish.o lpclib.o lpc10lib.o gsmlib.o deslib.o md5lib.o idealib.o libdes.o
- $(CC) $(MIKEOBJS) adpcm/adpcm-u.o des/des.a md5/md5.o idea/idea.a -lm blowfish/libblowfish.a lpc10/liblpc10.a gsm/lib/libgsm.a lpc/lpc.o libdes/libdes.a $(LFLAGS) -o sfmike
-
- LAUNCHOBJS = launch.o soundbyte.o usleep.o g711.o
-
- sflaunch: $(LAUNCHOBJS)
- $(CC) $(LAUNCHOBJS) $(LFLAGS) -o sflaunch
-
- LWLDOBJS = lwld.o html.o xdsub.o
-
- sflwld: $(LWLDOBJS)
- $(CC) $(LWLDOBJS) $(LFLAGS) -o sflwld
-
- LWLOBJS = lwl.o
-
- sflwl: $(LWLOBJS)
- $(CC) $(LWLOBJS) $(LFLAGS) -o sflwl
-
- ECHOOBJS = echo.o codecs.o g711.o rtpacket.o ulaw.o xdsub.o
-
- sfecho: $(ECHOOBJS) md5lib.o
- $(CC) $(ECHOOBJS) md5/md5.o adpcm/adpcm-u.o lpc/lpc.o $(LFLAGS) -o sfecho
-
- REFLECTOBJS = reflect.o codecs.o html.o g711.o rtpacket.o ulaw.o xdsub.o
-
- sfreflect: $(REFLECTOBJS) md5lib.o
- $(CC) $(REFLECTOBJS) md5/md5.o adpcm/adpcm-u.o lpc/lpc.o $(LFLAGS) -o sfreflect
-
- # Configure the voice on demand server for the platform's
- # location of Perl and network constant definitions.
-
- sfvod: sfvod.pl
- echo \#\! $(PERL) >sfvod
- echo \$$version = `tail -1 version.h`\; >>sfvod
- echo '#include <stdio.h>' >sfvod-t.c
- echo '#include <sys/types.h>' >>sfvod-t.c
- echo '#include <sys/socket.h>' >>sfvod-t.c
- echo 'main(){printf("$$AF_INET = %d; $$SOCK_DGRAM = %d;%c", AF_INET, SOCK_DGRAM, 10);return 0;}' >>sfvod-t.c
- $(CC) sfvod-t.c -o sfvod-t
- ./sfvod-t >>sfvod
- rm sfvod-t.c sfvod-t
- cat sfvod.pl >>sfvod
- chmod 755 sfvod
-
- # Compression and encryption libraries. Each of these creates
- # a place-holder .o file in the main directory (which is not
- # an actual object file, simply a place to hang a time and
- # date stamp) to mark whether the library has been built.
- # Note that if you actually modify a library you'll need to
- # delete the place-holder or manually make within the library
- # directory. This is tacky but it avoids visiting all the
- # library directories on every build and/or relying on features
- # in make not necessarily available on all platforms.
-
- adpcmlib.o:
- ( echo "Building ADPCM library."; cd adpcm ; make CC="$(CC)" )
- echo "ADPCM" >adpcmlib.o
-
- deslib.o:
- ( echo "Building DES library."; cd des ; make CC="$(CC) $(CCFLAGS)" )
- echo "DES" >deslib.o
-
- libblowfish.o:
- ( echo "Building BLOWFISH library."; cd blowfish ; make CC="$(CC) $(CCFLAGS) $(DEBUG)" )
- echo "BLOWFISH" >libblowfish.o
-
- libdes.o:
- ( echo "Building LIBDES library."; cd libdes ; make -f Makefile.sf CC="$(CC) $(CCFLAGS) $(DEBUG)" )
- echo "LIBDES" >libdes.o
-
- lpclib.o:
- ( echo "Building LPC library."; cd lpc ; make CC="$(CC) $(CCFLAGS) $(DEBUG)" )
- echo "LPC" >lpclib.o
-
- lpc10lib.o:
- ( echo "Building LPC10 library."; cd lpc10 ; make CC="$(CC) $(CCFLAGS) $(DEBUG)" )
- echo "LPC" >lpc10lib.o
-
- gsmlib.o:
- ( echo "Building GSM library."; cd gsm ; make CC="$(CC)" )
- echo "GSM" >gsmlib.o
-
- md5lib.o:
- ( echo "Building MD5 library."; cd md5 ; make CC="$(CC)" )
- echo "MD5" >md5lib.o
-
- idealib.o:
- ( echo "Building IDEA library."; cd idea ; make CC="$(CC)" )
- echo "IDEA" >idealib.o
-
- # Object file dependencies
-
- codecs.o: codecs.c speakfree.h
-
- common.o: common.c common.h
-
- html.o: html.c
-
- mike.o: mike.c speakfree.h version.h
-
- launch.o: launch.c speakfree.h version.h
-
- lwl.o: lwl.c speakfree.h version.h
-
- lwld.o: lwld.c speakfree.h version.h
-
- echo.o: echo.c speakfree.h vat.h version.h
-
- reflect.o: reflect.c speakfree.h vat.h version.h
-
- rtpacket.o: rtpacket.c speakfree.h rtp.h
-
- soundbyte.o: Makefile soundbyte.c speakfree.h
-
- speaker.o: speaker.c speakfree.h version.h
-
- vatpkt.o: vatpkt.c speakfree.h vat.h
-
- speakfree.h: audio_descr.h rtp.h rtpacket.h ulaw2linear.h types.h
-
- testgsm: testgsm.o gsmlib.o
- $(CC) testgsm.o -lm gsm/lib/libgsm.a $(LFLAGS) -o testgsm
-
- manpage:
- nroff -man sfmike.1 | $(PAGER)
- nroff -man sfspeaker.1 | $(PAGER)
- nroff -man sflaunch.1 | $(PAGER)
- nroff -man sflwl.1 | $(PAGER)
- nroff -man sflwld.1 | $(PAGER)
- nroff -man sfecho.1 | $(PAGER)
- nroff -man sfreflect.1 | $(PAGER)
- nroff -man sfvod.1 | $(PAGER)
-
- # Process NROFF manual pages into cat-able .man pages
-
- mantext:
- nroff -man sfmike.1 | col -b >/tmp/sfmike.man
- nroff -man sfspeaker.1 | col -b >/tmp/sfspeaker.man
- nroff -man sflaunch.1 | col -b >/tmp/sfspeaker.man
- nroff -man sflwl.1 | col -b >/tmp/sflwl.man
- nroff -man sflwld.1 | col -b >/tmp/sflwld.man
- nroff -man sfecho.1 | col -b >/tmp/sfecho.man
- nroff -man sfreflect.1 | col -b >/tmp/sfecho.man
- nroff -man sfvod.1 | col -b >/tmp/sfvod.man
-
- # Print manual pages for all programs. Assumes you have "ptroff"
-
- printman:
- ptroff -man sfmike.1
- ptroff -man sfspeaker.1
- ptroff -man sflaunch.1
- ptroff -man sflwl.1
- ptroff -man sflwld.1
- ptroff -man sfecho.1
- ptroff -man sfreflect.1
- ptroff -man sfvod.1
-
- # Clean everything
-
- clean:
- rm -f core *.out *.o *.bak $(PROGRAMS) *.shar sfvod-t*
- ( cd adpcm; make clean )
- ( cd blowfish; make clean )
- ( cd libdes; make clean )
- ( cd lpc; make clean )
- ( cd lpc10; make clean )
- ( cd gsm; make clean )
- ( cd des; make clean )
- ( cd md5; make clean )
- ( cd idea; make clean )
-
- # Clean only the main directory, not the libraries
-
- dusty:
- rm -f core *.out *.o *.bak $(PROGRAMS) *.shar sfvod-t*
-
- # Install binaries and manual pages. You'll need to
- # be root to install in system directories.
-
- install: $(PROGRAMS)
- $(INSTALL) -o root -g root -m 755 -s $(PROGRAMS) $(INSTDIR_BIN)
- $(INSTALL) -o root -g root -m 644 *.1 $(INSTDIR_MAN)/man1
-